Syntax on top of prototypes — cleaner to write, not a different inheritance model.
ES6 class syntax doesn't introduce a new inheritance system — it's built entirely on top of JavaScript's existing prototype chain, just with a syntax that reads closer to class-based languages. Under the hood, class Dog extends Animal still sets up Dog.prototype to inherit from Animal.prototype, and methods you write inside a class still end up as non-enumerable properties on that prototype, not on individual instances.
What class syntax does add is real behavioral differences from old-style constructor functions: class bodies always run in strict mode, class declarations aren't hoisted the way function declarations are (they exist in a temporal dead zone), and calling a class without new throws instead of silently producing a broken object. super also does two distinct jobs — super() calls the parent constructor, while super.method() calls a parent's method — and understanding which one you need is a common early stumbling block.
What you'll walk away knowing